﻿#define _CRT_SECURE_NO_WARNINGS 1
#include "stack.h"
#include "queue.h"
//#include <queue>

using namespace std;
using namespace MyStack;
using namespace MyQueue;

//int main()
//{
//	stack<int> s1;
//	s1.push(1);
//	s1.push(2);
//	s1.push(3);
//	s1.push(4);
//
//	while (!s1.empty())
//	{
//		cout << s1.top() << " ";
//		s1.pop();
//	}
//	cout << endl;
//
//	stack<int, list<int>> s2;
//	s1.push(1);
//	s1.push(2);
//	s1.push(3);
//	s1.push(4);
//
//	while (!s1.empty())
//	{
//		cout << s1.top() << " ";
//		s1.pop();
//	}
//	cout << endl;
//
//	queue<int, list<int>> q1;
//	q1.push(1);
//	q1.push(2);
//	q1.push(3);
//	q1.push(4);
//
//	while (!q1.empty())
//	{
//		cout << q1.front() << " ";
//		q1.pop();
//	}
//	cout << endl;
//
//	return 0;
//}

// priority_queue test
//int main()
//{
//	priority_queue<int> pq1;
//	pq1.push(3);
//	pq1.push(1);
//	pq1.push(4);
//	pq1.push(2);
//	while (!pq1.empty())
//	{
//		cout << pq1.top() << " ";
//		pq1.pop();
//	}
//	cout << endl;
//	priority_queue<int, vector<int>, greater<int>> pq2;
//	pq2.push(3);
//	pq2.push(1);
//	pq2.push(4);
//	pq2.push(2);
//	while (!pq2.empty())
//	{
//		cout << pq2.top() << " ";
//		pq2.pop();
//	}
//	cout << endl;
//	return 0;
//}

#include "priority_queue.h"
using namespace MyPriorityQueue;
//int main()
//{
//    // 1. 创建大根堆对象（存储int类型）
//    priority_queue<int> maxHeap;
//
//    // 2. 入队：插入一组无序数据（3, 1, 4, 1, 5, 9, 2, 6）
//    maxHeap.push(3);
//    maxHeap.push(1);
//    maxHeap.push(4);
//    maxHeap.push(1);
//    maxHeap.push(5);
//    maxHeap.push(9);
//    maxHeap.push(2);
//    maxHeap.push(6);
//    cout << "大根堆出队顺序（从大到小）：";
//	while (!maxHeap.empty())
//	{
//		cout << maxHeap.top() << " ";
//        maxHeap.pop();
//	}
//	cout << endl;
//
//	int a[] = { 3, 1, 4, 1, 5, 9, 2, 6 };
//    priority_queue<int> pq1(a, a + sizeof(a) / sizeof(int));
//    cout << "大根堆出队顺序（从大到小）：";
//    while (!pq1.empty())
//    {
//        cout << pq1.top() << " ";
//        pq1.pop();
//    }
//    cout << endl;
//
//
//    priority_queue<int, MyPriorityQueue::greater<int>> pq2(a, a + sizeof(a) / sizeof(int));
//    cout << "小根堆出队顺序（从小到大）：";
//    while (!pq2.empty())
//    {
//        cout << pq2.top() << " ";
//        pq2.pop();
//    }
//    cout << endl;
//
//	return 0;
//}

// 仿函数 
// 对象行为类似函数
//template <class T>
//struct Less
//{
//	bool operator()(int left, int right)
//	{
//		return left < right;
//	}
//};
//
//template <class T>
//struct Greater
//{
//	bool operator()(int& left, int& right)
//	{
//		return left > right;
//	}
//};
//
//int main()
//{
//	Less<int> lessFunc;
//	cout << lessFunc(1, 2) << endl; // 1 < 2 ? true(1) : false(0)
//
//	return 0;
//}


class A

{

public:

  A() :m_iVal(0) { test(); }

  virtual void func() { std::cout << m_iVal << " "; }

  void test() { func(); }

public:

  int m_iVal;

};



class B : public A

{

public:

    B() { test(); }

    virtual void func()

    {

        ++m_iVal;

        std::cout << m_iVal << " ";

    }

};



int main(int argc, char* argv[])

{

    A* p = new B;

    p->test();

    return 0;

}